package org.com.behavioralPattern.mediatorPattern;

/**
 * @author Jonny
 * @version 1.0
 * @Description:
 * @date 2021/4/27 16:01
 */

/**
 *  优点
 * ■ 减少类间的依赖，将原有的一对多的依赖变成一对一的依赖，使得对象之间的关系更易维护和理解。
 * ■ 避免同事对象之间过度耦合，同事类只依赖于中介者，使同事类更易被复用，中介类和同事类可以相对独立地演化。
 * ■ 中介者模式将对象的行为和协作抽象化，将对象在小尺度的行为上与其他对象的相互作用分开处理。
 *
 *
 * ■ 中介者模式降低了同事对象的复杂性，但增加了中介者类的复杂性。
 * ■ 中介者类经常充满了各个具体同事类的关系协调代码，这种代码是不能复用的。
 *
 * 注意事项
 *
 * 中介者模式简单，但是简单不代表容易使用，它很容易被误用和滥用。在面向对象的编程中，
 * 对象和对象之间必然会有依赖关系，如果某个类和其他类没有任何相互依赖的关系，
 * 那这个类就是一个孤岛，在系统中就没有存在的必要。一个类依赖多个类的情况也是正常的，
 * 存在就有其合理性，并不是只要有多个依赖关系就考虑使用中介者模式。
 * 在下列几种情况下不适合使用中介者模式。
 *
 * ■ 不应当在责任划分混乱时使用。通常情况下，一个初级设计师在面向对象的技术不熟悉时，
 * 会使一个系统在责任的分割上发生混乱。责任分割的混乱会使得系统中的对象与对象之间产生不适当的复杂关系。
 * ■ 不应当对数据类和方法类使用。初级设计师常常会设计出这样一种系统，让一系列类只含有数据，
 * 另一些类只含有方法。例如，描述一个客户时，这些设计师首先设计出一个“客户数据”类，只含有客户数据；
 * 另外再设计一个类叫做“管理类”，含有操作客户以及此客户购买公司产品、付账的方法。管理类自然会涉及其他的类，
 * 诸如产品数据类、订单数据类、付账数据类、应收账数据类等。这不是一种好的设计方式，也不是中介者模式
 * ■ 正确理解封装。封装首先是行为，以及行为所涉及的状态的封装。行为与状态是不应该分割开的。
 * 中介者模式的用途是管理很多的对象的相互作用，以便使这些对象可以专注于自身的行为。
 *
 */
public class Test {
    public static void main(String[] args) {
        MarriageAgency agenc=new MarriageAgencyImpl();
        Person p1=new Man("张三",18,30,agenc);
        Person p2=new Man("狗蛋",25,18,agenc);

        Person p3=new Woman("翠花",18,25,agenc);
        Person p4=new Woman("lucy",45,15,agenc);

        p1.findPartner();
        p2.findPartner();

    }
}
